package cn.pegasus.teamwork.sysconfig.service.impl;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.iyizhan.teamwork.base.service.impl.BaseServiceImpl;
import cn.iyizhan.teamwork.base.util.PageHelper;
import cn.iyizhan.teamwork.base.util.PageObject;
import cn.iyizhan.teamwork.base.util.push.AndroidPush;
import cn.iyizhan.teamwork.base.util.push.ApplePush;
import cn.pegasus.teamwork.sysconfig.entity.SysConfigMessage;
import cn.pegasus.teamwork.sysconfig.entity.SysMessagePush;
import cn.pegasus.teamwork.sysconfig.mapper.SysConfigMessageMapper;
import cn.pegasus.teamwork.sysconfig.mapper.SysMessagePushMapper;
import cn.pegasus.teamwork.sysconfig.service.SysConfigMessageService;
import cn.pegasus.teamwork.util.MseeageUtil;

/**
 * @ClassName: SysConfigMessageServiceImpl
 * @Description:(系统消息serviceImpl)
 * @author zhoulibo
 * @date 2015年12月3日 下午5:56:37
 */
@Service
public class SysConfigMessageServiceImpl extends BaseServiceImpl<SysConfigMessage, SysConfigMessageMapper>
		implements SysConfigMessageService {
	// 注入当前dao对象
	@Autowired
	private SysConfigMessageMapper sysConfigMessageMapper;

	@Autowired
	private SysMessagePushMapper sysMessagePushMapper;

	public SysConfigMessageServiceImpl() {
		setMapperClass(SysConfigMessageMapper.class, SysConfigMessage.class);
	}

	private static String SYSTEM_TITLE = "系统通知";
	private static String EXAMINE_TITLE = "审核通知";
	private static String DEPOSIT_TITLE = "提现通知";
	private static String PAYMENT_TITLE = "付款通知";
	private static String APPEAL_TITLE = "申诉通知";
	private static String PROFIT_TITLE = "收益通知";
	private static String ADDFRIEND_TITLE = "添加关注人通知";
	private static String DELFRIEND_TITLE = "取消关注人通知";
	private static String FIRST_PLAY_MONEY = "线下打款通知";

	/**
	 * 添加系统消息（群发消息）
	 */
	public Map<String, Object> addMessage(Map<String, Object> map, Long userId, Integer appId, int isPush)
			throws Exception {
		Map<String, Object> resultMap = new HashMap<String, Object>();
		try {
			// SysUcenterUserMain sysUcenterUser = new SysUcenterUserMain();
			// sysUcenterUser.setUserType(2);
			// sysUcenterUser.setAppId(appId);
			// List<SysUcenterUserMain> list =
			// sysUcenterUserMapper.selectByObject(sysUcenterUser);
			// List<SysConfigMessage> msgList = new
			// ArrayList<SysConfigMessage>();
			// if (null != list && list.size() > 0) {
			// for (SysUcenterUserMain sysUcenterUser2 : list) {
			SysConfigMessage sysConfigMessage = new SysConfigMessage();
			// 状态
			sysConfigMessage.setCurrType(1);
			// 消息发送时间
			sysConfigMessage.setMsgSendDate(new Date());
			// 发送人
			sysConfigMessage.setMsgSendUserid(1l);
			// 消息类型
			sysConfigMessage.setMsgType(1);
			// 创建人
			sysConfigMessage.setCreateUserId(userId);
			// 接收人
			// sysConfigMessage.setMsgAcceptUserid(sysUcenterUser2.getId());
			// 消息标题
			sysConfigMessage.setMsgTitle(SYSTEM_TITLE);
			// 消息内容
			sysConfigMessage.setMsgContent(map.get("msgContent").toString());
			sysConfigMessage.setCreateTime(new Date());
			sysConfigMessage.setIsPush(isPush);
			// msgList.add(sysConfigMessage);
			// }
			// sysConfigMessageMapper.addMessageList(msgList);
			sysConfigMessageMapper.insertByEntity(sysConfigMessage);
			// 发送推送消息
			// if (isPush == 1) {
			// for (SysConfigMessage sysConfigMessage : msgList) {
			// pushMessage(sysConfigMessage.getId());
			// }
			// }
			resultMap.put("status", "success");
			resultMap.put("sysConfigMessage", sysConfigMessage);
			// } else {
			// resultMap.put("status", -3);
			// }
		} catch (Exception e) {
			logger.error("添加消息失败", e);
			resultMap.put("status", -1);
		}
		return resultMap;
	}

	/**
	 * 获取用户消息列表
	 */
	public List<SysConfigMessage> getSysConfigMessageinfo(Long userId) throws Exception {
		List<SysConfigMessage> list = new ArrayList<SysConfigMessage>();
		try {
			if (null != userId) {
				SysConfigMessage configMessage = new SysConfigMessage();
				configMessage.setMsgAcceptUserid(userId);
				list = sysConfigMessageMapper.selectByObject(configMessage);
			} else {
				logger.error("用户ID 不能为空");
			}
		} catch (Exception e) {
			logger.error("查询用户消息列表失败", e);
		}
		return list;
	}

	/**
	 * 删除消息
	 */
	public Map<String, Object> delMessageByUser(Integer id, Long userId) throws Exception {
		Map<String, Object> resultMap = new HashMap<String, Object>();
		try {
			if (null != id && null != userId) {
				SysConfigMessage configMessage = new SysConfigMessage();
				configMessage.setId(id);
				configMessage.setMsgAcceptUserid(userId);
				sysConfigMessageMapper.deleteByEntity(configMessage);
			} else {
				resultMap.put("type", -1);
			}
		} catch (Exception e) {
			logger.error("删除消息失败", e);
			;
		}
		return resultMap;
	}

	/**
	 * 分页查询消息
	 */
	public PageObject<SysConfigMessage> getMsgList(Map<String, Object> map) throws Exception {
		PageObject<SysConfigMessage> pageObject = new PageObject<SysConfigMessage>();
		int totalData = 0;
		SysConfigMessage configMessage = new SysConfigMessage();
		totalData = sysConfigMessageMapper.getCount(configMessage);
		// 分页查询
		PageHelper pageHelper = new PageHelper(totalData, map);
		List<SysConfigMessage> list = sysConfigMessageMapper.pageQueryByObject(pageHelper.getMap());
		pageObject = pageHelper.getPageObject();
		pageObject.setDataList(list);
		return pageObject;
	}

	/**
	 * 获取消息详情
	 */
	public SysConfigMessage getSysConfigMessageInfo(Integer id) throws Exception {
		SysConfigMessage configMessage = new SysConfigMessage();
		configMessage.setId(id);
		configMessage = sysConfigMessageMapper.selectSingle(configMessage);
		return configMessage;
	}

	/**
	 * 提交修改数据
	 */
	public Map<String, Object> updateMessageOk(Map<String, Object> map, Long userId) throws Exception {
		Map<String, Object> resultMap = new HashMap<String, Object>();
		SysConfigMessage configMessage = new SysConfigMessage();
		configMessage = M2O(map);
		configMessage.setLastUpdateTime(new Date());
		configMessage.setLastUpdateUserId(userId);
		sysConfigMessageMapper.updateByEntity(configMessage);
		resultMap.put("status", "success");
		return resultMap;
	}

	/**
	 * 删除消息
	 */
	public Map<String, Object> delMessage(Map<String, Object> map) throws Exception {
		Map<String, Object> resultMap = new HashMap<String, Object>();
		SysConfigMessage configMessage = new SysConfigMessage();
		configMessage.setId(Integer.valueOf(map.get("id").toString()));
		sysConfigMessageMapper.deleteByEntity(configMessage);
		resultMap.put("status", "success");
		return resultMap;
	}

	/**
	 * 根据消息类型添加消息 map
	 */
	public Map<String, Object> addMessageByType(Map<String, Object> map, int isPush) throws Exception {
		Map<String, Object> resultMap = new HashMap<String, Object>();
		if (!map.isEmpty()) {
			int type = Integer.valueOf(map.get("type").toString()).intValue();
			SysConfigMessage sysConfigMessage = new SysConfigMessage();
			// 状态
			sysConfigMessage.setCurrType(1);
			// 消息发送时间
			sysConfigMessage.setMsgSendDate(new Date());
			// 发送人
			sysConfigMessage.setMsgSendUserid(1l);
			// 创建人
			sysConfigMessage.setCreateUserId(1L);
			// 接收人
			sysConfigMessage.setMsgAcceptUserid(Long.valueOf(map.get("userId").toString()));
			// 发工资模块企业后台打款通知
			if (type == 1) {
				SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd");
				// 消息类型
				sysConfigMessage.setMsgType(1);
				// 消息标题
				sysConfigMessage.setMsgTitle(SYSTEM_TITLE);
				// 消息内容:您尾号0XXX的卡于X年X月X日收到100.00元
				sysConfigMessage.setMsgContent(
						"您尾号" + map.get("content") + "的卡于" + time.format(new Date()) + "收到" + map.get("reason") + "元");
			}
			// 任务：赚外快模块
			if (type == 3) {
				int passNo = Integer.valueOf(map.get("passNo").toString()).intValue();
				// 消息类型
				sysConfigMessage.setMsgType(3);
				if (passNo == 1) {// 审核通过
					// 消息标题
					sysConfigMessage.setMsgTitle(EXAMINE_TITLE);
					// 消息内容:您在你好银行上传截图审核通过，获得26元任务奖励
					sysConfigMessage
							.setMsgContent("您在" + map.get("content") + "上传截图审核通过，获得" + map.get("reason") + "元任务奖励");
				}
				if (passNo == 2) {// 审核未通过
					// 消息标题
					sysConfigMessage.setMsgTitle(EXAMINE_TITLE);
					// 消息内容:您在你好银行上传的截图审核失败。
					sysConfigMessage.setMsgContent("您在" + map.get("content") + "上传的截图审核失败。");
				}
				if (passNo == 3) {// 等待审核
					// 消息标题
					sysConfigMessage.setMsgTitle(EXAMINE_TITLE);
					// 消息内容:您在你好银行上传截图成功，等待审核。
					sysConfigMessage.setMsgContent("您在" + map.get("content") + "上传截图成功，等待审核");
				}
				if (passNo != 1 && passNo != 2 && passNo != 3) {
					resultMap.put("status", -2);// 是否通过传参错误
					return resultMap;
				}
			}
			// 审核提现模块
			if (type == 4) {// 提现申请审核
				// 消息类型
				sysConfigMessage.setMsgType(4);
				int passNo = Integer.valueOf(map.get("passNo").toString()).intValue();
				if (passNo == 1) {// 提现申请审核通过提醒
					// 消息标题
					sysConfigMessage.setMsgTitle(EXAMINE_TITLE);
					// 消息内容:您有一笔提现到招商银行（2771）1500.00元的交易审核通过，请等待打款。
					sysConfigMessage.setMsgContent("您有一笔提现到" + map.get("bankName") + "(" + map.get("tailNumber")
							+ ")发起了一笔余额提现,提现金额" + map.get("money") + "元的交易审核通过，请等待打款");
				}
				if (passNo == 2) {// 提现申请审核不通过提醒
					// 消息标题
					sysConfigMessage.setMsgTitle(EXAMINE_TITLE);
					// 消息内容:您有一笔提现到招商银行（2771）1500.00元的交易审核失败,请联系客服处理。
					sysConfigMessage.setMsgContent("您有一笔提现到" + map.get("bankName") + "(" + map.get("tailNumber")
							+ ")发起了一笔余额提现,提现金额" + map.get("money") + "元的交易审核失败,请联系客服处理");
				}
				if (passNo != 1 && passNo != 2) {
					resultMap.put("status", -2);// 是否通过传参错误
					return resultMap;
				}
			}
			if (type == 5) {// 付款成功消息
				sysConfigMessage.setMsgType(5);
				// 消息标题
				sysConfigMessage.setMsgTitle(PAYMENT_TITLE);
				// 消息内容:您购买的XXX（游戏）的XX（订单名称）已经支付成功。共计XX元，通过余额付款。
				sysConfigMessage.setMsgContent("您购买的" + map.get("content") + "的" + map.get("reason") + "已经支付成功,共计"
						+ map.get("money") + "元，通过余额付款");

			}
			// 反馈消息发送
			if (type == 6) {
				sysConfigMessage.setMsgType(6);
				// 消息标题
				sysConfigMessage.setMsgTitle(APPEAL_TITLE);
				// 消息内容:管理员反馈了您的问题,内容为：XXXXXXXX
				sysConfigMessage.setMsgContent("管理员反馈了您的问题,内容为：" + map.get("content"));
			}
			// 购买理财：涨工资模块
			if (type == 7) {
				int passNo = Integer.valueOf(map.get("passNo").toString()).intValue();
				// 消息类型
				sysConfigMessage.setMsgType(7);
				if (passNo == 1) {// 审核通过
					// 消息标题
					sysConfigMessage.setMsgTitle(EXAMINE_TITLE);
					// 消息内容:您在你好银行理财产品上传的截图审核通过，理财返现将在理财产品到期后发放到您的账号
					sysConfigMessage.setMsgContent("您在" + map.get("content") + "理财产品上传的截图审核通过,获得理财返现将在理财产品到期后发放到您的账号");
				}
				if (passNo == 2) {// 审核未通过
					// 消息标题
					sysConfigMessage.setMsgTitle(EXAMINE_TITLE);
					// 消息内容:您在你好银行上传的截图审核失败。
					sysConfigMessage.setMsgContent("您在" + map.get("content") + "上传的截图审核失败。");
				}
				if (passNo == 3) {// 等待审核
					// 消息标题
					sysConfigMessage.setMsgTitle(EXAMINE_TITLE);
					// 消息内容:您在你好银行上传截图成功，等待审核。
					sysConfigMessage.setMsgContent("您在" + map.get("content") + "上传截图成功，等待审核");
				}
				if (passNo != 1 && passNo != 2 && passNo == 3) {
					resultMap.put("status", -2);// 是否通过传参错误
					return resultMap;
				}
			}
			// 发工资模块：开户
			if (type == 8) {
				int passNo = Integer.valueOf(map.get("passNo").toString()).intValue();
				// 消息类型
				sysConfigMessage.setMsgType(8);
				if (passNo == 1) {// 审核通过
					// 消息标题
					sysConfigMessage.setMsgTitle(EXAMINE_TITLE);
					// 消息内容:您在你好银行上传截图审核通过，获得26元任务奖励
					sysConfigMessage
							.setMsgContent("您在" + map.get("content") + "上传截图审核通过，获得" + map.get("reason") + "元开户补贴");
				}
				if (passNo == 2) {// 审核未通过
					// 消息标题
					sysConfigMessage.setMsgTitle(EXAMINE_TITLE);
					// 消息内容:您在你好银行上传的截图审核失败。
					sysConfigMessage.setMsgContent("您在" + map.get("content") + "上传的截图审核失败。");
				}
				if (passNo == 3) {// 等待审核
					// 消息标题
					sysConfigMessage.setMsgTitle(EXAMINE_TITLE);
					// 消息内容:您在你好银行上传截图成功，等待审核。
					sysConfigMessage.setMsgContent("您在" + map.get("content") + "上传截图成功，等待审核");
				}
				if (passNo != 1 && passNo != 2 && passNo == 3) {
					resultMap.put("status", -2);// 是否通过传参错误
					return resultMap;
				}
			}
			// 提现申请打款通知
			if (type == 9) {
				sysConfigMessage.setMsgType(9);
				// 消息标题
				sysConfigMessage.setMsgTitle(DEPOSIT_TITLE);
				// 消息内容:您有一笔提现到招商银行（2771）1500.00元的交易已经打款。
				sysConfigMessage.setMsgContent("您有一笔提现到" + map.get("bankName") + "(" + map.get("tailNumber")
						+ ")发起了一笔余额提现,提现金额为：" + map.get("money") + "元，交易已经打款。");
			}
			// 添加关注人通知
			if (type == 10) {
				sysConfigMessage.setMsgType(10);
				// 消息标题
				sysConfigMessage.setMsgTitle(ADDFRIEND_TITLE);
				// 消息内容:<手机号>已添加你为好友
				String phone = map.get("userMobile").toString();
				sysConfigMessage.setMsgContent(map.get("userNick") == null ? ""
						: map.get("userNick") + "<" + phone.substring(0, 3) + "****"
								+ phone.substring(7, phone.length()) + ">已添加你为好友！");
			}
			// 添加关注人通知
			if (type == 11) {
				sysConfigMessage.setMsgType(11);
				// 消息标题
				sysConfigMessage.setMsgTitle(DELFRIEND_TITLE);
				// 消息内容:昵称+<手机号>已取消关注你了
				String phone = map.get("userMobile").toString();
				sysConfigMessage.setMsgContent(map.get("friendNick") == null ? ""
						: map.get("friendNick") + "<" + phone.substring(0, 3) + "****"
								+ phone.substring(7, phone.length()) + ">已取消关注你了");
			}

			// 线下打款通知
			if (type == 12) {
				sysConfigMessage.setMsgType(12);
				// 消息标题
				sysConfigMessage.setMsgTitle(FIRST_PLAY_MONEY);
				String proName = map.get("proName").toString();
				sysConfigMessage.setMsgContent("官方已经线下结算" + proName + "任务。请联系你的上级。");
			}

			sysConfigMessage.setCreateTime(new Date());
			sysConfigMessage.setIsPush(isPush);
			sysConfigMessageMapper.insertByEntity(sysConfigMessage);
			// 发送推送消息
			// if (isPush == 1) {
			// pushMessage(sysConfigMessage.getId());
			// }
			resultMap.put("sysConfigMessage", sysConfigMessage);
			resultMap.put("status", "success");
		} else {
			resultMap.put("status", -1);// 参数错误
		}
		return resultMap;
	}

	// 批量插入赎回消息
	public Map<String, Object> addBatchRedeemMsg(Map<String, Object> map, int isPush) throws Exception {
		Map<String, Object> resultMap = new HashMap<String, Object>();
		List<SysConfigMessage> messageList = new ArrayList<SysConfigMessage>();
		try {
			if (!map.isEmpty()) {
				@SuppressWarnings("unchecked")
				List<Map<String, Object>> list = (List<Map<String, Object>>) map.get("list");
				if (null != list && list.size() > 0) {
					for (Map<String, Object> dataMap : list) {
						// int
						// type=Integer.valueOf(dataMap.get("type").toString()).intValue();
						SysConfigMessage sysConfigMessage = new SysConfigMessage();
						// 状态
						sysConfigMessage.setCurrType(1);
						// 消息发送时间
						sysConfigMessage.setMsgSendDate(new Date());
						// 发送人
						sysConfigMessage.setMsgSendUserid(1l);
						// 创建人
						sysConfigMessage.setCreateUserId(1L);
						// 接收人
						sysConfigMessage.setMsgAcceptUserid(Long.valueOf(dataMap.get("userId").toString()));
						// 消息类型
						sysConfigMessage.setMsgType(2);
						// 消息标题
						sysConfigMessage.setMsgTitle(PROFIT_TITLE);
						// 消息内容:您购买的你好银行理财产品已赎回，获得一站资产返利100元
						sysConfigMessage.setMsgContent("您购买的" + dataMap.get("content") + "已赎回,点击查看" + "获得一站资产返利"
								+ dataMap.get("reason") + "元");
						// 理财产品ID
						sysConfigMessage.setCurrType(Integer.valueOf(dataMap.get("wmpId").toString()).intValue());
						// 创建时间
						sysConfigMessage.setCreateTime(new Date());
						// 是否推送：是否推送 0否 1是
						sysConfigMessage.setIsPush(isPush);
						messageList.add(sysConfigMessage);

					}
				}
				sysConfigMessageMapper.addMessageList(messageList);
				// 发送推送消息:这里暂时没有实现推送
				// if (isPush == 1) {
				// for (SysConfigMessage sysConfigMessage : messageList) {
				// pushMessage(sysConfigMessage.getId());
				// }
				// }
				resultMap.put("status", "success");
			} else {
				resultMap.put("status", -1);// 参数错误
			}
		} catch (Exception e) {
			logger.error("批量插入赎回通知失败！", e);
			;
			e.printStackTrace();
		}
		return resultMap;
	}

	public List<SysConfigMessage> selectByObject(SysConfigMessage scm) {

		return sysConfigMessageMapper.selectByObject(scm);
	}

	public List<SysConfigMessage> getSysConfigMessageList(SysConfigMessage scm) {
		return sysConfigMessageMapper.getSysConfigMessageList(scm);
	}

	public static void messagePush() {

	}

	/**
	 * 修改推送消息
	 * 
	 * @param configMessage
	 * @return
	 */
	public int updateSysConfigMessage(SysConfigMessage configMessage) {
		try {
			if (configMessage.getId() != null) {
				sysConfigMessageMapper.updateByEntity(configMessage);
			} else {
				logger.error("推送消息id缺失");
				return -2;
			}
			return 0;
		} catch (Exception e) {
			logger.error("修改系统推送消息失败", e);
			return -1;
		}

	}

	public SysConfigMessage selectSingle(SysConfigMessage configMessage) {
		return sysConfigMessageMapper.selectSingle(configMessage);
	}

	/**
	 * push推送消息
	 * 
	 * @param id
	 */
	public void pushMessage1(Integer id) {
		System.out.println("进入消息推送阶段，需要推送的消息ID：" + id);
		logger.info("进入消息推送阶段，需要推送的消息ID：" + id);
		try {
			// 获取id对应推送消息
			SysConfigMessage configMessage = new SysConfigMessage();
			configMessage.setId(id);
			configMessage = sysConfigMessageMapper.selectSingle(configMessage);
			// 获取消息内容
			String content = configMessage.getMsgContent();
			if (content.length() > 100) {
				content = content.substring(0, 100) + "...";
			}
			Map<String, List<String>> map = null;
			// 处理消息推送人
			if (configMessage.getMsgType() == 1) {// 推送给所有用户
				map = MseeageUtil
						.getMessagePushByIosAndAndroid(sysMessagePushMapper.selectByObject(new SysMessagePush()));
			} else {// 推送给指定用户
				SysMessagePush sysMessagePush = new SysMessagePush();
				sysMessagePush.setUserId(configMessage.getMsgAcceptUserid());
				map = MseeageUtil.getMessagePushByIosAndAndroid(sysMessagePushMapper.selectByObject(sysMessagePush));
			}
			System.out.println(map.containsKey("android") + "----ios:" + map.containsKey("ios"));
			if (map.get("android") != null) {
				System.out.println("准备进行android推送，推送人数：" + map.get("android").size());
				// 批量安卓消息推送
				String messageId = AndroidPush.pushAlertByMore(configMessage.getMsgTitle(), content, map.get("android"),
						"78119539f6466fed550fff61", "7663919d6c2dbd2bfff57814", null);
				// 修改消息状态及保存push消息ID
				configMessage.setPushNo(messageId);
			}
			if (map.get("ios") != null) {
				System.out.println("准备进行ios推送，推送人数：" + map.get("ios").size());
				// 批量ios消息推送
				ApplePush.push(map.get("ios"), content, "/zywa/keystore/izcProDevTest.p12", "1", null);
			}
			configMessage.setIsPush(1);
			sysConfigMessageMapper.updateByEntity(configMessage);

		} catch (Exception e) {
			logger.error("消息推送失败", e);
		}
	}

	/**
	 * 批量消息推送
	 * 
	 * @param appCode
	 * @param msgid
	 * @param title
	 * @param content
	 * @param extra
	 */
	public void pushMessage(String appCode, Integer msgid, String title, String content, Map<String, String> pushMap,
			Map<String, String> extra) {
		System.out.println("进入消息推送阶段...");
		logger.info("进入消息推送阶段...");
		String messageId = null;
		try {
			if (msgid != null) {
				SysConfigMessage configMessage = new SysConfigMessage();
				configMessage.setId(msgid);
				configMessage = sysConfigMessageMapper.selectSingle(configMessage);
				content = configMessage.getMsgContent();
				title = configMessage.getMsgTitle();
			}
			// 消息内容长度处理
			if (content.length() > 100) {
				content = content.substring(0, 100) + "...";
			}
			// 处理消息推送人
			Map<String, List<String>> map = MseeageUtil
					.getMessagePushByIosAndAndroid(sysMessagePushMapper.selectByObject(new SysMessagePush()));

			System.out.println(map.containsKey("android") + "----ios:" + map.containsKey("ios"));
			// 批量安卓消息推送
			if (map.get("android") != null) {
				System.out.println("准备进行android推送，推送人数：" + map.get("android").size());
				messageId = AndroidPush.pushAlertByMore(title, content, map.get("android"),
						pushMap.get("androidSecretKey").toString(), pushMap.get("androidAppKey").toString(), extra);
			}

			// 批量ios消息推送
			if (map.get("ios") != null) {
				System.out.println("准备进行ios推送，推送人数：" + map.get("ios").size());
				ApplePush.push(map.get("ios"), content, pushMap.get("iosPath").toString(),
						pushMap.get("iosPassword").toString(), extra);
			}

			// 获取id对应推送消息
			if (msgid != null) {
				SysConfigMessage configMessage = new SysConfigMessage();
				configMessage.setId(msgid);
				configMessage = sysConfigMessageMapper.selectSingle(configMessage);
				configMessage.setIsPush(1);
				if (messageId != null) {// 修改消息状态及保存push消息ID
					configMessage.setPushNo(messageId);
				}
				sysConfigMessageMapper.updateByEntity(configMessage);
			}
		} catch (Exception e) {
			logger.error("消息推送失败", e);
		}
	}

	/**
	 * 单个消息推送
	 * 
	 * @param userId
	 * @param appCode
	 * @param id
	 *            消息ID
	 * @param title
	 *            消息标题
	 * @param content
	 *            消息内容
	 * @param extra
	 *            附加字典（如URL等）
	 * @return
	 */
	public int pushMessage(Long userId, String appCode, Integer msgId, String title, String content,
			Map<String, String> pushMap, Map<String, String> extra) {
		logger.info("进入消息推送阶段...");
		String messageId = null;
		boolean bool = true;
		try {
			if (msgId != null) {
				SysConfigMessage configMessage = new SysConfigMessage();
				configMessage.setId(msgId);
				configMessage = sysConfigMessageMapper.selectSingle(configMessage);
				content = configMessage.getMsgContent();
				title = configMessage.getMsgTitle();
			}

			// 消息内容长度处理
			if (content.length() > 100) {
				content = content.substring(0, 100) + "...";
			}

			if (null == extra) {
				extra = new HashMap<String, String>();
			}

		} catch (Exception e) {
			logger.error("消息推送失败", e);
		}
		return 1;
	}

	@Override
	public Map<String, Object> addMessgae(Map<String, Object> map, Long userId) throws Exception {
		Map<String, Object> resultMap = new HashMap<String, Object>();
		SysConfigMessage sysConfigMessage = new SysConfigMessage();
		sysConfigMessage = M2O(map);
		// 状态
		sysConfigMessage.setCurrType(1);
		// 消息发送时间
		sysConfigMessage.setMsgSendDate(new Date());
		// 发送人
		sysConfigMessage.setMsgSendUserid(userId);
		// 消息类型
		sysConfigMessage.setMsgType(1);
		// 创建人
		sysConfigMessage.setCreateUserId(userId);
		sysConfigMessage.setMsgAcceptUserid(-1L);
		// 消息内容
		sysConfigMessage.setCreateTime(new Date());
		sysConfigMessage.setIsPush(0);
		sysConfigMessageMapper.insertByEntity(sysConfigMessage);
		resultMap.put("status", "success");
		resultMap.put("sysConfigMessage", sysConfigMessage);

		return resultMap;
	}

	@Override
	public void addMessage(int userType,String msgType, String msgTitle, String msgContent, String msgAcceptUserid)
			throws Exception {
		SysConfigMessage sysConfigMessage = new SysConfigMessage();

		// 消息发送时间
		sysConfigMessage.setMsgSendDate(new Date());
		sysConfigMessage.setUserType(userType);
		// 消息类型
		sysConfigMessage.setMsgType(Integer.valueOf(msgType));

		// 接收人
		sysConfigMessage.setMsgAcceptUserid(Long.valueOf(msgAcceptUserid));
		// 消息标题
		sysConfigMessage.setMsgTitle(msgTitle);
		// 消息内容
		sysConfigMessage.setMsgContent(msgContent);
		sysConfigMessageMapper.insertByEntity(sysConfigMessage);
	}

}
